package com.mazaiting.redeye.event

import cn.jpush.im.android.api.event.LoginStateChangeEvent.Reason
import com.mazaiting.log.L
import java.util.*
import com.umeng.commonsdk.stateless.UMSLEnvelopeBuild.mContext
import android.content.Intent
import cn.jpush.im.android.api.event.*
import com.mazaiting.redeye.base.Config
import com.mazaiting.redeye.module.main.MainActivity
import org.greenrobot.eventbus.EventBus


/***
 *
 *
 *                                                    __----~~~~~~~~~~~------___
 *                                   .  .   ~~//====......          __--~ ~~
 *                   -.            \_|//     |||\\  ~~~~~~::::... /~
 *                ___-==_       _-~o~  \/    |||  \\            _/~~-
 *        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
 *    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
 *  .~       .~       |   \\ -_    /  /-   /   ||      \   /
 * /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
 * |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
 *          '         ~-|      /|    |-~\~~       __--~~
 *                      |-~~-_/ |    |   ~\_   _-~            /\
 *                           /  \     \__   \/~                \__
 *                       _--~ _/ | .-~~____--~-/                  ~~==.
 *                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
 *                                 -_     ~\      ~~---l__i__i__i--~~_/
 *                                 _-~-__   ~)  \--______________--~~
 *                               //.-~~~-~_--~- |-------~~~~~~~~
 *                                      //.-~~~--\
 *                               神兽保佑
 *                              代码无BUG!
 * @author mazaiting
 * @date 2019-07-26
 * @description IM 消息事件
 * 方法名:
 *      - onEvent: 子线程
 *      - onEventMainThread: 主线程
 */
class ImMessageEvent {
    /**
     * 接收在线消息
     */
    fun onEvent(event: MessageEvent) {
        //获取事件发生的会话对象
        val newMessage = event.message//获取此次离线期间会话收到的新消息列表
//        L.d("在线消息：$newMessage")

        EventBus.getDefault().post(event)
    }

    /**
     * 接收离线消息。
     * 类似MessageEvent事件的接收，上层在需要的地方增加OfflineMessageEvent事件的接收
     * 即可实现离线消息的接收。
     */
    fun onEvent(event: OfflineMessageEvent) {
        //获取事件发生的会话对象
        val conversation = event.conversation
        val newMessageList = event.offlineMessageList//获取此次离线期间会话收到的新消息列表
//        L.d(String.format(
//            Locale.SIMPLIFIED_CHINESE,
//            "收到%d条来自%s的离线消息。\n",
//            newMessageList.size,
//            conversation.targetId
//        ))
        L.d("conversation: $conversation, newMessageList: $newMessageList")
    }


    /**
     * 接收消息漫游事件
     * 如果在JMessageClient.init时启用了消息漫游功能，则每当一个会话的漫游消息同步完成时
     * sdk会发送此事件通知上层。
     */
    fun onEvent(event: ConversationRefreshEvent) {
        //获取事件发生的会话对象
        val conversation = event.conversation
        //获取事件发生的原因，对于漫游完成触发的事件，此处的reason应该是
        //MSG_ROAMING_COMPLETE
        val reason = event.reason
        L.d(
            String.format(
                Locale.SIMPLIFIED_CHINESE,
                "收到ConversationRefreshEvent事件,待刷新的会话是%s.\n",
                conversation.targetId
            )
        )
        println("事件发生的原因 : $reason")
    }

    /**
     * 用户登录状态改变
     * @param event 登录状态
     */
    fun onEvent(event: LoginStateChangeEvent) {
        when {
            Reason.user_logout == event.reason -> L.d("退出登录")
            Reason.user_deleted == event.reason -> L.d("删除用户")
            Reason.user_password_change == event.reason -> L.d("用户密码改变")
            Reason.user_login_status_unexpected == event.reason -> L.d("用户状态异常")
            Reason.user_disabled == event.reason -> L.d("用户禁用")
            else -> L.d("未知异常: ${event.reason}")
        }
    }

    /**
     * 通知栏点击事件, 自定义跳转到指定页面
     * @param event 通知栏点击事件
     */
    fun onEvent(event: NotificationClickEvent) {
        val notificationIntent = Intent(mContext, MainActivity::class.java)
        mContext.startActivity(notificationIntent)
    }

    /**
     * 好友相关事件: 添加好友等
     * @param event 事件
     */
    fun onEvent(event: ContactNotifyEvent) {
        // 原因
        val reason = event.reason
        // 用户
        val fromUsername = event.fromUsername
        // key
        val appKey = event.getfromUserAppKey()
        L.d("好友相关: $event")
        if (appKey == Config.JPUSH_KEY) {
            when (event.type) {
                // 收到好友邀请
                ContactNotifyEvent.Type.invite_received -> {
                }
                // 对方接收了你的好友邀请
                ContactNotifyEvent.Type.invite_accepted -> {
                }
                // 对方拒绝了你的好友邀请
                ContactNotifyEvent.Type.invite_declined -> {
                }
                // 对方将你从好友中删除
                ContactNotifyEvent.Type.contact_deleted -> {
                }
                else -> {
                }
            }
            EventBus.getDefault().post(event)
        }
    }
}